package com.example;

/**
 * 案例五：数组拷贝
 */
public class Test5 {
    public static void main(String[] args) {
        // 需求：请把一个整型数组,例如存了数据:11,22,33,拷贝成一个一一样的新数组出来
        int[] arr = {11, 22, 33};
        int[] newArr = copy(arr);
        printArray(newArr);

        // 注意：这个不是拷贝数组,这是把arr的地址赋值给arr2,所以arr2和arr指向的都是同一个内存空间
        // int[] arr2 = arr;
        // arr2[1] = 666;
        // 此时输出就会发现是666,因为指向的是同一块内存空间
        // System.out.println(arr[1]);
        
        newArr[1] = 666;
        // 此时输出的结果就是22,因为newArr指向的是新开辟的地址
        System.out.println(arr[1]);
    }

    /**
     * 数组拷贝
     *
     * @param arr 原始数组
     * @return 新数组
     */
    public static int[] copy(int[] arr) {
        // 1.创建一个和原始数组长度相同的数组
        int[] newArr = new int[arr.length];

        // 2.遍历原始数组,将元素依次拷贝到新数组
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }

        // 3.返回新数组
        return newArr;
    }

    /**
     * 打印数组
     *
     * @param arr 数组
     */
    public static void printArray(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            // 判断是否是最后一个元素,如果是,那么就直接输出,而不用在后面再输出","
            System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ",");
        }
        System.out.println("]");
    }
}
